/**
 * 这是一个简易的前端文件服务器
 * 读文件使用promise实现
 */
 const Http = require('node:http');
 const Url = require('node:url');
 const File = require('node:fs/promises')
 const Path = require('node:path')
 // 前端的请求路径开头
 const frontPath =  /\/sys[\/\b]/;
 // 前端的文件夹路径
 // const frontFileName = 'sys'
 
 // 获取前端的文件夹路径
 async function getFrontFile(urlpath){
    return await getFile(Path.join(process.cwd(),urlpath))
 }
 // 获取文件状态
 async function getFileStat(filepath){
  try {
     return await File.stat(filepath)
  } catch (error) {
     return null
  }
 }
 // 根据url获取文件
 async function getFile(filepath){
     const status = await getFileStat(filepath)
    // 获取文件状态
    if(status){
      if(status.isDirectory()){
         return getFile(Path.resolve(filepath,'./index.html'))
      }else{
         return await File.readFile(filepath)
      }
    }else{
     const rootFrontFile = Path.resolve(process.cwd(),'./sys/index.html')
     // console.log(filepath,Path.resolve(process.cwd(),'./sys/index.html'))
     if(filepath === rootFrontFile){
         return await File.readFile(Path.resolve(process.cwd(),'./404.html'))
     }else{
         return await getFile(rootFrontFile)
     }
         
    }
    // 如果是文件夹则在文件夹里查找有没有index.html
    // 如果是文件则把文件返回
 }
 
 const server = Http.createServer(async (req, res) => {
     const url = Url.parse(req.url)
     if( frontPath.test(url.pathname)  ){
         const file = await getFrontFile(url.pathname)
         res.write(file)
     }else{
         res.writeHead(200, { 'Content-Type': 'application/json' })
         res.write(JSON.stringify({
             test: '121'
         }))
     }
     
     res.end()
 })
 
 server.listen(8081)
 
 // path.resolve 和path.join踩坑记录
 // path.resove(process.cwd(),'/sys') e:\sys
 // path.join(process.cwd(),'/sys') e:\yxd\nodestudy\sys